package fr.miage.course7.app.view;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JPanel;

import fr.miage.course7.app.model.Position;
import fr.miage.course7.app.model.Participant;

/**
 * Classe permettant de gérer la souris sur les bateaux.
 * @author Jean-Yannick TILIN
 * @author Alexandre JAHAN
 *
 */
public class RafraichirItemMouseListener implements MouseListener {

    /**
     * Participant.
     */
    private Participant participant;

    /**
     * Coordonnées du participant.
     */
    private Position coordonnees;

    /**
     * Listener.
     */
    private RafraichirItemListener refreshFrame;

    /**
     * Panel invisible pour le listener.
     */
    private JPanel panInvisible;

    /**
     * Hauteur du panel invisible.
     */
    private final int panHeight = 12;

    /**
     * Largeur du panel invisible.
     */
    private final int panWidth = 30;


    /**
     * Constructeur de la classe.
     * @param listener listener
     * @param panel panel invisible
     * @param p participant
     * @param coord coordonnées
     */
    public RafraichirItemMouseListener(final RafraichirItemListener listener,
                                       final JPanel panel,
                                       final Participant p,
                                       final Position coord) {
        this.refreshFrame = listener;
        this.panInvisible = panel;
        this.participant = p;
        this.coordonnees = coord;
    }

    /**
     * Méthode qui permet de récupérer un clic souris.
     * @param evt evenement
     */
    public final void mouseClicked(final MouseEvent evt) {

    }

    /**
     * Méthode qui permet de récupérer le focus de la souris.
     * @param evt evenement
     */
    public final void mouseEntered(final MouseEvent evt) {

        String coord = "(0°,0°)";

        if (coordonnees.getLon() == 0 && coordonnees.getLat() == 0) {
            refreshFrame.getMainFrame().addText(
                    refreshFrame.getMainFrame().getLesCouleurs().get(participant.getIdentifiant()),
                    panInvisible.getX() + panWidth,
                    panInvisible.getY() + panHeight,
                    coord
            );
        } else {

            //Generation des coordonnées

            coord = "(";

            if (coordonnees.getLat() > 0) {
                coord += coordonnees.getLat() + "°N";
            } else {
                coord += -coordonnees.getLat() + "°S";
            }

            coord += ",";

            if (coordonnees.getLon() > 0) {
                coord += coordonnees.getLon() + "°E";
            } else {
                coord += -coordonnees.getLon() + "°O";
            }

            coord += ")";

            //Affichage des coordonnées
            refreshFrame.getMainFrame().addText(
                    refreshFrame.getMainFrame().getLesCouleurs().get(participant.getIdentifiant()),
                    panInvisible.getX() + panWidth,
                    panInvisible.getY() + panHeight,
                    coord
            );
        }
    }

    /**
     * Méthode appelée lorsque la souris sort du panel.
     * @param evt evenement
     */
    public final void mouseExited(final MouseEvent evt) {
        refreshFrame.getMainFrame().rafraichir();
    }

    /**
     * Méthode appelée lors d'un clic souris sur le panel.
     * @param evt evenement
     */
    public void mousePressed(final MouseEvent evt) {

    }

    /**
     * Méthode appelée lors du relachement du clic souris sur le panel.
     * @param evt evenement
     */
    public void mouseReleased(final MouseEvent evt) {

    }
}
